package com.example.lark.im.service;

import com.example.lark.im.vo.resp.LarkSuiteJsapiTicketRespVO;
import com.lark.oapi.service.application.v6.model.SetAppBadgeReq;
import com.lark.oapi.service.contact.v3.model.BatchGetIdUserReq;
import com.lark.oapi.service.contact.v3.model.BatchGetIdUserRespBody;
import com.lark.oapi.service.im.v1.model.CreateMessageReq;
import com.lark.oapi.service.im.v1.model.CreateMessageRespBody;
import com.lark.oapi.service.im.v1.model.PatchMessageReq;

/**
 * @author liaoen
 */
public interface LarkSuiteService {

    /**
     * 获取租户访问凭证tenant_access_token
     *
     * @return 租户访问凭证tenant_access_token
     */
    String getTenantAccessToken();

    /**
     * 获取 JSAPI 临时调用凭证
     * 由于获取 jsapi_ticket 的api调用次数非常有限，频繁刷新 jsapi_ticket 会导致api调用受限，影响自身业务，开发者需要在自己的服务全局缓存jsapi_ticket 。
     *
     * @param url 当前网页的 URL（可以是本地局域网网址），不包含#及其后面部分。
     * @return LarkSuiteJsapiTicketRespVO-前端认证需要的信息
     */
    LarkSuiteJsapiTicketRespVO getJsapiTicket(String url);

    /**
     * 通过手机号或邮箱获取对应的用户ID信息
     *
     * @param batchGetIdUserReq 手机号或邮箱列表
     * @return 手机号或者邮箱对应的用户id信息
     */
    BatchGetIdUserRespBody getUserIdByMobileOrEmail(BatchGetIdUserReq batchGetIdUserReq);

    /**
     * 发送消息
     *
     * @param createMessageReq CreateMessageReq
     * @return 发送的消息关联信息
     */
    CreateMessageRespBody sendMessage(CreateMessageReq createMessageReq);

    /**
     * 更新应用发送的消息卡片。注意这更新是一个"消息卡片"，对应的"发送消息"也应该是卡片消息(interactive-消息卡片)
     *
     * @param patchMessageReq PatchMessageReq
     */
    void updateMessageCardFromApplication(PatchMessageReq patchMessageReq);

    /**
     * 更新应用红点
     */
    void updateAppBadge(SetAppBadgeReq setAppBadgeReq);

}

